package com.zhangshanfeng.test;

import java.util.Comparator;
import java.util.TreeSet;

/*
## TreeSet集合

### 3.1TreeSet集合概述和特点【应用】

+ 不可以存储重复元素
+ 没有索引
+ 可以将元素按照规则进行排序
  + TreeSet()：根据其元素的自然排序进行排序
  + TreeSet(Comparator comparator) ：根据指定的比较器进行排序

  ===================================================
  ### 自然排序Comparable的使用【应用】

- 案例需求

  - 存储学生对象并遍历，创建TreeSet集合使用无参构造方法
  - 要求：按照年龄从小到大排序，年龄相同时，按照姓名的字母顺序排序

- 实现步骤

  1. 使用空参构造创建TreeSet集合
     + 用TreeSet集合存储自定义对象，无参构造方法使用的是自然排序对元素进行排序的
  2. 自定义的Student类实现Comparable接口
     + 自然排序，就是让元素所属的类实现Comparable接口，重写compareTo(T o)方法
  3. 重写接口中的compareTo方法
     + 重写方法时，一定要注意排序规则必须按照要求的主要条件和次要条件来写


 */
public class TreeSetDemo02 {
    public static void main(String[] args) {
        /*//1. 使用空参构造创建TreeSet集合
        //     + 用TreeSet集合存储自定义对象，无参构造方法使用的是自然排序对元素进行排序的
        TreeSet<Integer> ts = new TreeSet<Integer>();*/

        TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                int result = o1.getAge() - o2.getAge();
                result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;


                return result;
            }
        });


        //不可以存储重复元素
        ts.add(new Student("zhangsan",18));
        ts.add(new Student("lisi",18));
        ts.add(new Student("wangwu",20));
        ts.add(new Student("zhaoliu",19));

        //可以将元素按照规则进行排序
        for (Student t : ts) {
            System.out.println(t);
        }








    }
}
